import socket
import urllib.request
import urllib.parse
import urllib.error

"""
    注意: timeout 设置超时时间，有默认值，超时没有响应，抛出异常
    
    还有 context 参数，它必须是 ssl.SSLContext 类型，用来指定 SSL 设置。

    此外，cafile 和 capath 这两个参数分别指定 CA 证书和它的路径，这个在请求 HTTPS 链接时会有用。
    
    cadefault 参数现在已经弃用了，其默认值为 False。
    
    前面讲解了 urlopen 方法的用法，通过这个最基本的方法，我们可以完成简单的请求和网页抓取。若需更加详细的信息，可以参见官方文档：https://docs.python.org/3/library/urllib.request.html。
"""

# urlencode 用于将字典或序列转换为 URL 查询字符串（如表单数据）
query_str = urllib.parse.urlencode({'name': 'jack'})
print(query_str)  # name=jack

# 转换成byte 字节流,按照指定编码
data = bytes(query_str, encoding='utf-8')

# post请求，设置0.1 响应超时
try:
    response = urllib.request.urlopen('https://httpbin.org/post', data=data,timeout=0.1)
    # 输出响应内容
    print(response.read().decode('utf-8'))
except urllib.error.URLError as e:
    # 判断异常原因e.reason是否是socket.timeout类型
    if isinstance(e.reason, socket.timeout):
        print('TIME OUT')



